#include <iostream>
using namespace std;

#define SIZE 100

class pila {
  int PILA[SIZE];
  int puntatore_pila;
public:
  pila();//costruttore
/* una funzione costruttore è una particolare funzione membro di una classe che porta lo
stesso nome della classe, le funzioni costruttore non possono restituire valori
pertanto non si deve specificare il tipo restituito
scopo delle funzioni costruttore è eseguire le inizializzazioni*/
  ~pila();//distruttore
/*la funzione distruttore ha lo stesso nome del costruttore ma preceduto da "~" "126"

scopo della funzione distruttore è deallocare la memoria
precedentemente allocata dall'oggetto*/
  void push(int); 
  int  pop();
};

//funzione costruttore
pila::pila()
{
puntatore_pila=0;
cout<<"pila inizializzata\n";
}

//funzione distruttore
pila::~pila()
{
cout<<"pila distrutta\n";
}


// Inserimento di un intero nella pila
void pila::push(int i)
{
  if(puntatore_pila==SIZE) {
    cout << "Pila piena\n";
    return;
  }
  PILA[puntatore_pila]=i;
  puntatore_pila++;
}

// Estrazione di un intero dalla pila
int pila::pop()
{
  if(puntatore_pila == 0) {
    cout << "Pila vuota\n";
    return 0;
  }
  puntatore_pila--;
  return PILA[puntatore_pila];
}

int main()
{
  pila pila1, pila2 ;
  pila1.push(1);
  pila2.push(2);
  pila1.push(3);
  pila2.push(4);
  cout << pila1.pop() << " ";
  cout << pila1.pop() << " ";
  cout << pila2.pop() << " ";
  cout << pila2.pop() << "\n";

  return 0;
}

/*
risultato:
pila inizializzata
pila inizializzata
3 1 4 2
pila distrutta
pila distrutta
Press any key to continue
*/